package cn.maihe.elg.operation.service.ConfigurationCenter.controller;

import cn.maihe.elg.operation.service.ConfigurationCenter.config.CenterConfig;
import cn.maihe.elg.operation.service.ConfigurationCenter.config.DynamicConfigLoader;
import cn.maihe.elg.operation.service.ConfigurationCenter.dto.CofigureAllDto;
import cn.maihe.elg.operation.service.ConfigurationCenter.dto.ConfigureDto;
import cn.maihe.elg.operation.service.ConfigurationCenter.service.ConfigureService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;

@Slf4j
@RestController
@RequestMapping("/v1/configure")
public class ConfigureController {
    private ConfigureService configureservice;

    private DynamicConfigLoader dynamicConfigLoader;

    private JdbcTemplate jdbcTemplate;

    //列表查询接口
/**
 * 分页查询配置列表
 *
 * @param pageNum 页码，默认为1
 * @param pageSize 每页大小，默认为10
 * @return ResponseEntity<PageInfo<ConfigureDto>> 配置列表分页结果
 */
@GetMapping("/query")
public ResponseEntity<PageInfo<ConfigureDto>> queryConfigure(
        @RequestParam(defaultValue = "1") Integer pageNum,
        @RequestParam(defaultValue = "10") Integer pageSize) {
    log.info("分页查询配置, pageNum={}, pageSize={}", pageNum, pageSize);
    try {
        PageInfo<ConfigureDto> result = configureservice.queryConfigure(pageNum, pageSize);
        return ResponseEntity.ok(result);
    } catch (Exception e) {
        log.error("分页查询配置失败, pageNum={}, pageSize={}", pageNum, pageSize, e);
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
    }
}


    // 新增测试类方法，用于测试配置查询功能
    @GetMapping("/test")
    public ResponseEntity<String> testConfigureQuery() {
        try {
            log.info("开始测试配置查询功能");
            PageInfo<ConfigureDto> result = configureservice.queryConfigure(1, 10);
            log.info("测试配置查询功能成功，查询到 {} 条记录", result.getSize());
            return ResponseEntity.ok("测试成功，查询到 " + result.getSize() + " 条记录");
        } catch (Exception e) {
            log.error("测试配置查询功能失败", e);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("测试失败: " + e.getMessage());
        }
    }
    //yml详细查询接口

    /**
     * 根据平台名称查询详细配置信息
     *
     * @param platformName 平台名称，用于查询对应的配置信息
     * @return ResponseEntity<?> 返回配置信息对象或错误信息
     * - 成功时返回CofigureAllDto对象，状态码200
     * - 未找到配置时返回错误信息Map，状态码404
     * - 查询异常时返回错误信息Map，状态码500
     */
    @PostMapping("/queryall")
    public ResponseEntity<?> getConfigureByPlatformName(@PathVariable String platformName) {
        log.info("根据平台名称查询详细配置: {}", platformName);
        try {
            // 调用服务层获取配置信息
            CofigureAllDto config = configureservice.getConfigByPlatformName(platformName);
            if (config != null) {
                return ResponseEntity.ok(config);
            } else {
                // 配置信息不存在时返回404状态
                return ResponseEntity.status(HttpStatus.NOT_FOUND)
                        .body(Collections.singletonMap("message", "未找到平台配置信息"));

            }
        } catch (Exception e) {
            // 发生异常时记录错误日志并返回500状态
            log.error("查询配置失败: ", e);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body(Collections.singletonMap("message", "查询配置失败: " + e.getMessage()));
        }
    }

    /**
     * 更新指定sys_name的状态
     *
     * @param useFlag 新状态 (1或0)
     */
    @PostMapping("/status")
    public ResponseEntity<String> updateStatus(@PathVariable String sysplatformName,
                                               @RequestParam Integer useFlag,
                                               @RequestParam String LastModifiedBy) {
        log.info("更新指定sys_name的状态: {}", sysplatformName);
        // 检查状态值
        if (!(useFlag == 1 || useFlag == 0)) {
            return ResponseEntity.badRequest().body("状态值错误");
        }
        try {
            //调用服务层更新状态

            int result = configureservice.updateConfigStatus(sysplatformName, useFlag, LastModifiedBy);

            if (result > 0) {
                //更新成功
                dynamicConfigLoader.refreshCache();
                log.info("更新成功,sysplatformName:{},useFlag:{}", sysplatformName, useFlag, LastModifiedBy);
                return ResponseEntity.ok("更新成功");
            } else {
                log.warn("为找到对应的配置，sysplatformName:{}", sysplatformName);
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("未找到对应的配置");
            }
        } catch (Exception e) {
            log.error("更新状态失败,sysplatformName:{},useFlag: {}", sysplatformName, useFlag, LastModifiedBy, e);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("更新状态失败：" + e.getMessage());

        }
    }
  /**
 * 新增配置信息
 *
 * @param centerInfo 配置信息对象
 * @param createdBy 创建人
 * @return ResponseEntity<String> 操作结果响应
 */
@PostMapping("/add")
public ResponseEntity<String> addConfigure(@RequestBody CenterConfig.CenterInfo centerInfo,
                                          @RequestParam String createdBy) {
    log.info("新增配置: {}, 创建人: {}", centerInfo, createdBy);

    try {
        // 调用服务层新增配置
        int result = configureservice.addConfigure(centerInfo, createdBy);

        if (result > 0) {
            // 新增成功，刷新缓存
            dynamicConfigLoader.refreshCache();
            log.info("配置新增成功, platformName: {}, 创建人: {}",
                    centerInfo.getPlatformName(), createdBy);
            return ResponseEntity.ok("配置新增成功");
        } else {
            log.warn("配置新增失败, platformName: {}, 创建人: {}",
                    centerInfo.getPlatformName(), createdBy);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("配置新增失败");
        }
    } catch (Exception e) {
        log.error("新增配置异常, platformName: {}, 创建人: {}",
                centerInfo.getPlatformName(), createdBy, e);
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body("新增配置异常: " + e.getMessage());
    }
}


}
